pub struct Video(/* private fields */);
Implementations§
Source§impl Video
impl Video
pub fn empty() -> Self
pub fn new(format: Pixel, width: u32, height: u32) -> Self
pub fn format(&self) -> Pixel
pub fn set_format(&mut self, value: Pixel)
pub fn kind(&self) -> Type
pub fn set_kind(&mut self, value: Type)
pub fn is_interlaced(&self) -> bool
pub fn is_top_first(&self) -> bool
pub fn has_palette_changed(&self) -> bool
pub fn width(&self) -> u32
pub fn set_width(&mut self, value: u32)
pub fn height(&self) -> u32
pub fn set_height(&mut self, value: u32)
pub fn color_space(&self) -> Space
pub fn set_color_space(&mut self, value: Space)
pub fn color_range(&self) -> Range
pub fn set_color_range(&mut self, value: Range)
pub fn color_primaries(&self) -> Primaries
pub fn set_color_primaries(&mut self, value: Primaries)
pub fn color_transfer_characteristic(&self) -> TransferCharacteristic
pub fn set_color_transfer_characteristic( &mut self, value: TransferCharacteristic, )
pub fn chroma_location(&self) -> Location
pub fn aspect_ratio(&self) -> Rational
pub fn coded_number(&self) -> usize
pub fn display_number(&self) -> usize
pub fn repeat(&self) -> f64
pub fn stride(&self, index: usize) -> usize
pub fn planes(&self) -> usize
pub fn plane_width(&self, index: usize) -> u32
pub fn plane_height(&self, index: usize) -> u32
pub fn plane<T: Component>(&self, index: usize) -> &[T]
pub fn plane_mut<T: Component>(&mut self, index: usize) -> &mut [T]
pub fn data(&self, index: usize) -> &[u8] ⓘ
pub fn data_mut(&mut self, index: usize) -> &mut [u8] ⓘ
Methods from Deref<Target = Frame>§
pub unsafe fn as_ptr(&self) -> *const AVFrame
pub unsafe fn as_mut_ptr(&mut self) -> *mut AVFrame
pub unsafe fn is_empty(&self) -> bool
pub fn is_key(&self) -> bool
pub fn is_corrupt(&self) -> bool
pub fn packet(&self) -> Packet
pub fn pts(&self) -> Option<i64>
Sourcepub fn set_pts(&mut self, value: Option<i64>)
pub fn set_pts(&mut self, value: Option<i64>)
Examples found in repository?
examples/transcode-audio.rs (line 171)
136fn main() {
137 ffmpeg::init().unwrap();
138
139 let input = env::args().nth(1).expect("missing input");
140 let output = env::args().nth(2).expect("missing output");
141 let filter = env::args().nth(3).unwrap_or_else(|| "anull".to_owned());
142 let seek = env::args().nth(4).and_then(|s| s.parse::<i64>().ok());
143
144 let mut ictx = format::input(&input).unwrap();
145 let mut octx = format::output(&output).unwrap();
146 let mut transcoder = transcoder(&mut ictx, &mut octx, &output, &filter).unwrap();
147
148 if let Some(position) = seek {
149 // If the position was given in seconds, rescale it to ffmpegs base timebase.
150 let position = position.rescale((1, 1), rescale::TIME_BASE);
151 // If this seek was embedded in the transcoding loop, a call of `flush()`
152 // for every opened buffer after the successful seek would be advisable.
153 ictx.seek(position, ..position).unwrap();
154 }
155
156 octx.set_metadata(ictx.metadata().to_owned());
157 octx.write_header().unwrap();
158
159 let in_time_base = transcoder.decoder.time_base();
160 let out_time_base = octx.stream(0).unwrap().time_base();
161
162 let mut decoded = frame::Audio::empty();
163 let mut encoded = ffmpeg::Packet::empty();
164
165 for (stream, mut packet) in ictx.packets() {
166 if stream.index() == transcoder.stream {
167 packet.rescale_ts(stream.time_base(), in_time_base);
168
169 if let Ok(true) = transcoder.decoder.decode(&packet, &mut decoded) {
170 let timestamp = decoded.timestamp();
171 decoded.set_pts(timestamp);
172
173 transcoder
174 .filter
175 .get("in")
176 .unwrap()
177 .source()
178 .add(&decoded)
179 .unwrap();
180
181 while let Ok(..) = transcoder
182 .filter
183 .get("out")
184 .unwrap()
185 .sink()
186 .frame(&mut decoded)
187 {
188 if let Ok(true) = transcoder.encoder.encode(&decoded, &mut encoded) {
189 encoded.set_stream(0);
190 encoded.rescale_ts(in_time_base, out_time_base);
191 encoded.write_interleaved(&mut octx).unwrap();
192 }
193 }
194 }
195 }
196 }
197
198 transcoder
199 .filter
200 .get("in")
201 .unwrap()
202 .source()
203 .flush()
204 .unwrap();
205
206 while let Ok(..) = transcoder
207 .filter
208 .get("out")
209 .unwrap()
210 .sink()
211 .frame(&mut decoded)
212 {
213 if let Ok(true) = transcoder.encoder.encode(&decoded, &mut encoded) {
214 encoded.set_stream(0);
215 encoded.rescale_ts(in_time_base, out_time_base);
216 encoded.write_interleaved(&mut octx).unwrap();
217 }
218 }
219
220 if let Ok(true) = transcoder.encoder.flush(&mut encoded) {
221 encoded.set_stream(0);
222 encoded.rescale_ts(in_time_base, out_time_base);
223 encoded.write_interleaved(&mut octx).unwrap();
224 }
225
226 octx.write_trailer().unwrap();
227}
Sourcepub fn timestamp(&self) -> Option<i64>
pub fn timestamp(&self) -> Option<i64>
Examples found in repository?
examples/transcode-audio.rs (line 170)
136fn main() {
137 ffmpeg::init().unwrap();
138
139 let input = env::args().nth(1).expect("missing input");
140 let output = env::args().nth(2).expect("missing output");
141 let filter = env::args().nth(3).unwrap_or_else(|| "anull".to_owned());
142 let seek = env::args().nth(4).and_then(|s| s.parse::<i64>().ok());
143
144 let mut ictx = format::input(&input).unwrap();
145 let mut octx = format::output(&output).unwrap();
146 let mut transcoder = transcoder(&mut ictx, &mut octx, &output, &filter).unwrap();
147
148 if let Some(position) = seek {
149 // If the position was given in seconds, rescale it to ffmpegs base timebase.
150 let position = position.rescale((1, 1), rescale::TIME_BASE);
151 // If this seek was embedded in the transcoding loop, a call of `flush()`
152 // for every opened buffer after the successful seek would be advisable.
153 ictx.seek(position, ..position).unwrap();
154 }
155
156 octx.set_metadata(ictx.metadata().to_owned());
157 octx.write_header().unwrap();
158
159 let in_time_base = transcoder.decoder.time_base();
160 let out_time_base = octx.stream(0).unwrap().time_base();
161
162 let mut decoded = frame::Audio::empty();
163 let mut encoded = ffmpeg::Packet::empty();
164
165 for (stream, mut packet) in ictx.packets() {
166 if stream.index() == transcoder.stream {
167 packet.rescale_ts(stream.time_base(), in_time_base);
168
169 if let Ok(true) = transcoder.decoder.decode(&packet, &mut decoded) {
170 let timestamp = decoded.timestamp();
171 decoded.set_pts(timestamp);
172
173 transcoder
174 .filter
175 .get("in")
176 .unwrap()
177 .source()
178 .add(&decoded)
179 .unwrap();
180
181 while let Ok(..) = transcoder
182 .filter
183 .get("out")
184 .unwrap()
185 .sink()
186 .frame(&mut decoded)
187 {
188 if let Ok(true) = transcoder.encoder.encode(&decoded, &mut encoded) {
189 encoded.set_stream(0);
190 encoded.rescale_ts(in_time_base, out_time_base);
191 encoded.write_interleaved(&mut octx).unwrap();
192 }
193 }
194 }
195 }
196 }
197
198 transcoder
199 .filter
200 .get("in")
201 .unwrap()
202 .source()
203 .flush()
204 .unwrap();
205
206 while let Ok(..) = transcoder
207 .filter
208 .get("out")
209 .unwrap()
210 .sink()
211 .frame(&mut decoded)
212 {
213 if let Ok(true) = transcoder.encoder.encode(&decoded, &mut encoded) {
214 encoded.set_stream(0);
215 encoded.rescale_ts(in_time_base, out_time_base);
216 encoded.write_interleaved(&mut octx).unwrap();
217 }
218 }
219
220 if let Ok(true) = transcoder.encoder.flush(&mut encoded) {
221 encoded.set_stream(0);
222 encoded.rescale_ts(in_time_base, out_time_base);
223 encoded.write_interleaved(&mut octx).unwrap();
224 }
225
226 octx.write_trailer().unwrap();
227}
pub fn quality(&self) -> usize
pub fn flags(&self) -> Flags
pub fn metadata(&self) -> DictionaryRef<'_>
pub fn set_metadata(&mut self, value: Dictionary<'_>)
pub fn side_data(&self, kind: Type) -> Option<SideData<'_>>
pub fn new_side_data(&mut self, kind: Type, size: usize) -> Option<SideData<'_>>
pub fn remove_side_data(&mut self, kind: Type)
Trait Implementations§
impl Eq for Video
impl StructuralPartialEq for Video
Auto Trait Implementations§
impl Freeze for Video
impl RefUnwindSafe for Video
impl Send for Video
impl Sync for Video
impl Unpin for Video
impl UnwindSafe for Video
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more